package com.miage.itrading.server.business;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.miage.itrading.client.GetListesService;
import com.miage.itrading.server.dao.CotationDAO;
import com.miage.itrading.shared.entites.Cotation;
import com.miage.itrading.shared.entites.Historique;
import com.miage.itrading.shared.entites.Intraday;

public class GetListesServiceImpl extends RemoteServiceServlet implements
		GetListesService, Serializable {

	private static final long	serialVersionUID	= 1L;

	public Cotation getByMnemo(String searchTxt) {

		System.out.println("searchTxt : " + searchTxt);

		CotationDAO dao = new CotationDAO();
		try {
			Cotation cot = dao.getCotationByMnemo(searchTxt, true);
			return cot;
		} catch (SQLException e) {
			System.out
					.println("impossible de trouver une cotation avec le mnémonique "
							+ searchTxt);
		}
		return new Cotation();
	}

	public Cotation getCotationById(int id) {
		Cotation c = new Cotation();

		try {
			CotationDAO cDAO = new CotationDAO();

			c = cDAO.getCotationById(id, true);
		} catch (Exception e) {
			System.out.println(e);
		}

		return c;
	}

	public Cotation getCotationByMnemo(String mnemo) {
		Cotation c = new Cotation();

		try {
			CotationDAO cDAO = new CotationDAO();

			c = cDAO.getCotationByMnemo(mnemo, false);

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return c;
	}

	/**
	 * Récupère l'historique de la cotation pour l'intervalle donné
	 */
	public List<Historique> getHistorique(int idCotation, Date start, Date end) {
		ArrayList<Historique> histo = new ArrayList<Historique>();

		try {
			CotationDAO c = new CotationDAO();

			histo = (ArrayList<Historique>) (c.getHistorique(idCotation, start,
					end));

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return histo;
	}

	/**
	 * Liste des cotations qui composent l'indice donné
	 * 
	 * @return HashMap<Nom indice, Liste des valeurs>
	 */
	public List<Cotation> getIndiceComposition(int idIndice) {

		ArrayList<Cotation> indiceComposition = new ArrayList<Cotation>();

		try {
			CotationDAO c = new CotationDAO();

			ArrayList<Integer> cotations = (ArrayList<Integer>) c
					.getIndiceComposition(idIndice);

			for (int i = 0; i < cotations.size(); ++i) {
				indiceComposition.add(c
						.getCotationById(cotations.get(i), false));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return indiceComposition;
	}

	public List<Cotation> getIndices() {

		ArrayList<Cotation> indices = new ArrayList<Cotation>();

		try {
			CotationDAO c = new CotationDAO();

			ArrayList<Integer> idsIndices = new ArrayList<Integer>();

			idsIndices = (ArrayList<Integer>) c.getIdsIndices();

			for (int i = 0; i < idsIndices.size(); ++i) {
				indices.add(c.getCotationById(idsIndices.get(i), false));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return indices;
	}

	/**
	 * Valeurs intraday de la cotation donnée
	 */
	public List<Intraday> getIntraday(int idCotation, Date start) {
		ArrayList<Intraday> histo = new ArrayList<Intraday>();

		try {
			CotationDAO c = new CotationDAO();
			histo = (c.getIntraday(idCotation, start));

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return histo;
	}
}